package com.wc.AlgoOJ_homework.ALgoOJ_BL5.D_因数平方和;

import java.util.Scanner;

/**
 * @Author congge
 * @Date 2024/4/10 19:28
 * @description http://43.138.190.70:8888/p/LQ1334?tid=66120c2c07c5c018a5dcf262
 */
public class Main {
    static Scanner sc = new Scanner(System.in);
    static int n, P = (int) 1e9 + 7;

    // 整数分块
    public static void main(String[] args) {
        n = sc.nextInt();
        long res = 0;
        int d = 1;
        // 10
        // 1    2   3   4   5   6   7   8   9   10
        // 10   5   3   2   2   1   1   1   1   1
        // 相当于10 * 1^2 + 5 * 2 ^ 2 + 3 * 4 ^ 2 + 2 * (4 ^ 2 + 5 ^ 2) + 1 * (6 ^ 2 +... + 10 ^ 2)
        // 这个 n / d 表示个数， n / x 表示的是终止点
        while (n / d > 0) {
            int x = n / d;
            int y = n / x;
            res = (res + x * (ff(y) - ff(d - 1)) + P) % P;
            d = y;
            d++;
        }
        System.out.println(res);
    }

    // 1 ^ 2 + 2 ^ 2 + ... + n ^ 2 = n * (n + 1) * (2 * n + 1) / 6,  6的逆元是 166666668
    static long ff(long n) {
        return n * (n + 1) % P * (2 * n + 1) % P * 166666668 % P;
    }
}
